package com.leetcode.offer.chapter5;

/**
 * @author Dennis Li
 * @date 2020/7/17 23:17
 */
public class TranslateNum_46 {

    // 关键还是状态方程的推导
    // 状态方程 f(n) = choose(f(n-1),f(n-1)+f(n-2))
    // choose 代表选择的条件，即
    // tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0
    public int translateNum(int num) {
        String s = String.valueOf(num);
        // a 代表f(n - 1)的状态，b代表f(n - 2)的状态
        int a = 1, b = 1;
        for (int i = 2; i < s.length(); i++) {
            String tmp = s.substring(i - 2, i);
            // 依然，还是tmp的比较
            int c = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? a + b : a;
            // 每次迭代会有一次N的进位
            b = a;
            a = c;
        }
        return a;
    }

    public int translateNum2(int num) {
        String s = String.valueOf(num);
        int a = 1, b = 1;
        for (int i = 2; i < s.length(); i++) {
            String temp = s.substring(i - 2, i);
            int c = temp.compareTo("10") >= 0 && temp.compareTo("25") <= 0 ? a + b : b;
            b = a;
            a = c;
        }
        return a;
    }

}
